今天我们学习了继承、多态、抽象、接口

1. 继承
类的继承的关键字是extends。使用extends就能使子类继承父类。子类与父类之间的关系永远都是子类is-a 父类,千万不能弄反。
在继承关系中,所有public的变量以及方法都能被继承到子类中,而且子类可以直接调用。但是,如果父类的变量或方法的访问请求是private,那子类就不能直接调用这些方法,只能使用accessor。
子类能有自己异于父类的方法,而这些方法是父类不能调用的,因为子类is-a 父类,而非反过来。
如果子类有一个函数,其函数签名和父类的某一函数相同,但内容与之不同,那这种情况叫做override。调用子类的这个函数时,会运行子类函数里面的内容。

2 多态
如果又一个类是这样的:
public class Students
public UnderGrad extends Students
public Gradstud extends Students
那么 UnderGrad 继承Students
Gradstud 继承 Students

Students 里有一个public函数a
UnderGrad 里有一个函数a,内容跟Students的不一样,但签名一样
Gradstud里有一个函数a,内容跟Students 和 UnderGrad的不一样,但签名一样。

Students s = new Students();
Students u = new UnderGrad();
Students g = new Gradstud();

s.a, u.a, g.a 这三个声明究竟调用的是哪个函数?这就是多态,s.a调用的是Students的,u.a调用的是UnderGrad的,g.a调用的是Gradstud的。这个过程是在运行代码时进行的。

UnderGrad里若有一个函数b,Students 里没有b,那写下u.b时会报错,因为Students里没有b,因此需要强制转换类型变成((UnderGrad) u) .b。

3 抽象
抽象类里面可以有完整的变量,完整的函数,也可以有抽象的、只有一个函数头的函数。抽象类永远不能被实例化。一个普通类可以继承抽象类,但是普通类里面必须把继承下来的抽象方法通过override变成普通方法。普通类里不能有抽象方法。抽象类也能继承抽象类。

4 接口
只有函数头,关键字implements.